#include <string>
#include <vector>
#include <iostream>

#include "../Common/Queue.h"
#include "../Common/Stack.h"

using namespace std;

// 我们自定义了一个新的数据容器：Queue，确保先进入 Queue 的先出队。
// Stack 栈，先进入栈的元素后出栈，后进先出。
// Stack<int> s; 定义一个空栈
// s.push(10); 元素入栈
// s.top(); 返回下一个将要出栈的元素
// s.pop(); 让元素出栈

// 仿照 Queue 的定义方式，来实现上面 Stack 的功能。


int main(int argc, char const *argv[]) {
  // 1. 假设我有一个表达队列的类型 Queue
  // 2. 我们应该如何保存所有排队的元素（假设排队的元素都是整数）
  // 3. 如何表达 Queue 中元素的个数
  
  // 定义的时候被自动创建
  Queue<int> q1; // 4. 如何能够向左边这样，定义一个空的队列，让他的 numbers 为空，size 等于 0.

  // 队列：我们要确保先进入队列的数字先出队列：先进先出。
  // enqueue - 让参数入队
  q1.enqueue(10);
  q1.enqueue(11);

  // top - 返回将要出队的元素
  cout << q1.top() << endl; // 11

  // dequeue - 将元素出队
  q1.dequeue(); // 10 出队
  q1.dequeue(); // 11 出队

  // 自动变量 & 手动变量
  Queue<string> * psPos = new Queue<string>();
  psPos->enqueue("11");
  psPos->enqueue("10");
  psPos->dequeue();

  delete psPos;
  return 0;
}
// 离开作用域的时候被自动销毁
// ... q1 已经离开它的作用域了，系统会自动销毁掉 q1。
